<!DOCTYPE html>
<!-- saved from url=(0035)http://127.0.0.1:7053/doc/flow.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  <title>Kooteam协作</title> <link rel="shortcut icon" href="http://127.0.0.1:7053/kooteam.ico"> <link rel="stylesheet" type="text/css" href="./grapheditor.css"> <script src="./mxClient.js.下载"></script> <script src="./flow.js.下载"></script> </head> <body class="geEditor">  <div class="geMenubarContainer" style="top: 0px; left: 0px; right: 0px; height: 0px;"><div class="geMenubar"><a class="geItem">文件</a><a class="geItem">编辑</a><a class="geItem">查看</a><a class="geItem">调整图形</a><a class="geItem">其它</a><a class="geItem">帮助</a><a class="geItem geStatus"></a></div></div><div style="touch-action: none; visibility: hidden; position: absolute; overflow: hidden; height: 1px; width: 1px;"><svg style="left: 0px; top: 0px; width: 100%; height: 100%; display: block; min-width: 6px; min-height: 5px;"><g><g></g><g></g><g></g><g></g></g></svg></div><div class="geSidebarContainer" style="left: 0px; top: 39px; width: 212px; bottom: 0px;"><div style="visibility: hidden;"></div><div><div class="geSidebar" style="box-sizing: border-box; overflow: hidden; width: 100%; padding: 14px 8px 0px;"><div style="white-space: nowrap; text-overflow: clip; padding-bottom: 8px; cursor: default;"><input placeholder="搜索图形" type="text" style="font-size: 12px; overflow: hidden; box-sizing: border-box; border: 1px solid rgb(213, 213, 213); border-radius: 4px; width: 100%; outline: none; padding: 6px 20px 6px 6px;"><img src="" title="搜索" style="position: relative; left: -18px; top: 1px; background: url(&quot;&quot;);"></div><center style="padding-top: 4px; padding-bottom: 4px;"><button style="display: none; line-height: normal; margin-top: 4px; margin-bottom: 8px;">更多结果</button></center></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">通用</a><div><div class="geSidebar" style="touch-action: none;"><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="1.44" y="7.68" width="28.8" height="14.4" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></rect></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="1.44" y="7.68" width="28.8" height="14.4" rx="2.16" ry="2.16" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></rect></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="0.73" y="7.3" width="29.2" height="14.6" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="0.73" y="7.3" width="29.2" height="14.6" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(7,10)scale(0.73)"><foreignobject style="overflow:visible;" pointer-events="all" width="22" height="12"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 24px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">Text</div></div></foreignobject></g></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="1.65" y="6.6" width="28.5" height="18" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="1.65" y="6.6" width="28.5" height="18" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(2,5)scale(0.15)"><foreignobject style="overflow:visible;" pointer-events="all" width="180" height="126"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow: hidden; max-height: 130px; max-width: 180px; width: 181px; white-space: normal; overflow-wrap: normal; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><h1>Heading</h1><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p></div></div></foreignobject></g></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><ellipse cx="15.84" cy="14.88" rx="14.399999999999999" ry="9.6" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></ellipse></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2.38" y="1.36" width="27.2" height="27.2" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></rect></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><ellipse cx="15.98" cy="14.96" rx="13.600000000000001" ry="13.600000000000001" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></ellipse></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="1.44" y="7.68" width="28.8" height="14.4" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></rect><path d="M 4.32 7.68 L 4.32 22.08 M 27.36 7.68 L 27.36 22.08" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 4.32 7.68 L 4.32 22.08 M 27.36 7.68 L 27.36 22.08" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 15.98 1.36 L 29.58 14.96 L 15.98 28.56 L 2.38 14.96 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 22.08 L 7.2 7.68 L 30.24 7.68 L 24.48 22.08 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 8.64 5.28 L 23.04 5.28 L 30.24 14.88 L 23.04 24.48 L 8.64 24.48 L 1.44 14.88 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.78 1.36 L 26.18 14.96 L 5.78 28.56 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.78 6.8 C 5.78 -0.45 26.18 -0.45 26.18 6.8 L 26.18 23.12 C 26.18 30.37 5.78 30.37 5.78 23.12 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path><path d="M 5.78 6.8 C 5.78 12.24 26.18 12.24 26.18 6.8" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 8.64 10.08 C 2.88 10.08 1.44 14.88 6.05 15.84 C 1.44 17.95 6.62 22.56 10.37 20.64 C 12.96 24.48 21.6 24.48 24.48 20.64 C 30.24 20.64 30.24 16.8 26.64 14.88 C 30.24 11.04 24.48 7.2 19.44 9.12 C 15.84 6.24 10.08 6.24 8.64 10.08 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 5.28 L 30.24 5.28 L 30.24 21.6 Q 23.04 16.42 15.84 21.6 Q 8.64 26.78 1.44 21.6 L 1.44 8.16 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2.38" y="1.36" width="27.2" height="27.2" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></rect><path d="M 2.38 8.16 L 29.58 8.16" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 2.38 8.16 L 29.58 8.16" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path><path d="M 9.18 1.36 L 9.18 28.56" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 9.18 1.36 L 9.18 28.56" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 5.28 L 25.44 5.28 L 30.24 10.08 L 30.24 24.48 L 6.24 24.48 L 1.44 19.68 L 1.44 5.28 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path><path d="M 1.44 5.28 L 25.44 5.28 L 30.24 10.08 L 6.24 10.08 Z" fill-opacity="0.05" fill="#000000" stroke="none" pointer-events="all"></path><path d="M 1.44 5.28 L 6.24 10.08 L 6.24 24.48 L 1.44 19.68 Z" fill-opacity="0.1" fill="#000000" stroke="none" pointer-events="all"></path><path d="M 6.24 24.48 L 6.24 10.08 L 1.44 5.28 M 6.24 10.08 L 30.24 10.08" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 5.28 L 25.44 5.28 L 30.24 14.88 L 25.44 24.48 L 1.44 24.48 L 6.24 14.88 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 22.08 L 7.2 7.68 L 24.48 7.68 L 30.24 22.08 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 7.68 Q 8.64 16.32 15.84 7.68 Q 23.04 -0.96 30.24 7.68 L 30.24 22.08 Q 23.04 13.44 15.84 22.08 Q 8.64 30.72 1.44 22.08 L 1.44 7.68 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.13 1.35 L 18.63 1.35 L 26.73 9.45 L 26.73 28.35 L 5.13 28.35 L 5.13 1.35 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path><path d="M 18.63 1.35 L 18.63 9.45 L 26.73 9.45 Z" fill-opacity="0.05" fill="#000000" stroke="none" pointer-events="all"></path><path d="M 18.63 1.35 L 18.63 9.45 L 26.73 9.45" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 13.23 1.35 L 26.73 1.35 L 26.73 28.35 L 5.13 28.35 L 5.13 9.45 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.44 5.28 L 30.24 5.28 L 30.24 17.28 L 20.64 17.28 L 15.84 24.48 L 15.84 17.28 L 1.44 17.28 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><ellipse cx="15.75" cy="4.73" rx="3.375" ry="3.375" fill="#ffffff" stroke="#777777" stroke-width="1.3" pointer-events="all"></ellipse><path d="M 15.75 8.1 L 15.75 19.35 M 15.75 10.35 L 9 10.35 M 15.75 10.35 L 22.5 10.35 M 15.75 19.35 L 9 28.35 M 15.75 19.35 L 22.5 28.35" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 15.75 8.1 L 15.75 19.35 M 15.75 10.35 L 9 10.35 M 15.75 10.35 L 22.5 10.35 M 15.75 19.35 L 9 28.35 M 15.75 19.35 L 22.5 28.35" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.78 1.36 Q 26.18 1.36 26.18 14.96 Q 26.18 28.56 5.78 28.56 Q 15.98 14.96 5.78 1.36 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.78 1.36 Q 26.18 1.36 26.18 14.96 Q 26.18 28.56 5.78 28.56 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 4.35 3.19 L 30.45 3.19 Q 24.65 14.79 30.45 26.39 L 4.35 26.39 Q -1.45 14.79 4.35 3.19 Z" fill="#ffffff" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 3.06 28.56 Q 28.56 28.56 15.81 15.81 Q 3.06 3.06 25.31 3.06" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 3.06 28.56 Q 28.56 28.56 15.81 15.81 Q 3.06 3.06 25.31 3.06" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 27.99 3.06 L 24.42 4.84 L 25.31 3.06 L 24.42 1.27 Z" fill="#777777" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 11.73 22.96 L 15.81 27.04 L 2.39 28.41 L 3.76 14.99 L 7.84 19.07 L 20.17 6.74 L 16.09 2.66 L 29.51 1.29 L 28.14 14.71 L 24.06 10.63 Z" fill="none" stroke="white" stroke-width="19.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 11.73 22.96 L 15.81 27.04 L 2.39 28.41 L 3.76 14.99 L 7.84 19.07 L 20.17 6.74 L 16.09 2.66 L 29.51 1.29 L 28.14 14.71 L 24.06 10.63 Z" fill="none" stroke="#777777" stroke-width="1.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.66 28.69 L 1.99 25.02 L 20.63 6.37 L 16.77 2.51 L 29.46 1.22 L 28.17 13.91 L 24.31 10.05 Z" fill="none" stroke="white" stroke-width="19.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 5.66 28.69 L 1.99 25.02 L 20.63 6.37 L 16.77 2.51 L 29.46 1.22 L 28.17 13.91 L 24.31 10.05 Z" fill="none" stroke="#777777" stroke-width="1.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 1.86 26.82 L 27.86 0.82 M 29.34 2.3 L 3.34 28.3 M 29.34 2.3" fill="none" stroke="white" stroke-width="19.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 1.86 26.82 L 27.86 0.82 M 29.34 2.3 L 3.34 28.3 M 29.34 2.3" fill="none" stroke="#777777" stroke-width="1.3" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2.12 27.56 L 28.62 1.06" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 2.12 27.56 L 28.62 1.06" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" stroke-dasharray="1.59 1.59" pointer-events="stroke"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2.12 27.56 L 28.62 1.06" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 2.12 27.56 L 28.62 1.06" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="stroke"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 7.18 23.16 L 23.98 6.36" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 7.18 23.16 L 23.98 6.36" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 5.65 24.69 L 6.67 21.64 L 7.18 23.16 L 8.7 23.67 Z" fill="#777777" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path><path d="M 25.51 4.83 L 24.49 7.88 L 23.98 6.36 L 22.46 5.85 Z" fill="#777777" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a><a class="geItem" style="overflow: hidden; width: 34px; height: 32px; padding: 1px;"><svg style="left: 1px; top: 1px; width: 32px; height: 30px; display: block; position: relative; overflow: hidden;"><g><g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 5.04 25.2 L 24.15 6.09" fill="none" stroke="white" stroke-width="19.3" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden"></path><path d="M 5.04 25.2 L 24.15 6.09" fill="none" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 25.71 4.53 L 24.67 7.65 L 24.15 6.09 L 22.59 5.57 Z" fill="#777777" stroke="#777777" stroke-width="1.3" stroke-miterlimit="10" pointer-events="all"></path></g></g><g></g><g></g></g></svg></a></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">杂项</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">高级</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">基本图形</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">箭头</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">UML</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">BPMN 通用</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">Flowchart</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div><a title="单击以展开。将图形拖拽至图表中。Shift+单击以改变所选内容。Alt+单击以插入及连接。" class="geTitle" style="background-image: url(&quot;&quot;); background-repeat: no-repeat; background-position: 0% 50%;">剪贴画</a><div><div class="geSidebar" style="touch-action: none; display: none;"></div></div></div><div class="geSidebarContainer geFormatContainer" style="right: 0px; z-index: 1; top: 39px; width: 240px; bottom: 0px;"><div style="white-space: nowrap; color: rgb(112, 112, 112); text-align: left; cursor: default;"><div class="geFormatSection" style="text-align: center; font-weight: bold; padding-top: 8px; font-size: 13px; border-width: 0px 0px 1px; border-style: solid; display: inline-block; height: 25px; overflow: hidden; width: 100%;">图表<img border="0" src="" title="隐藏" style="position: absolute; display: block; right: 0px; top: 8px; cursor: pointer; margin-top: 1px; margin-right: 17px; border: 1px solid transparent; padding: 1px; opacity: 0.5;"></div><div class="geFormatSection" style="padding: 12px 0px 12px 18px;"><div style="padding: 0px 0px 6px; white-space: nowrap; overflow: hidden; width: 200px; font-weight: bold;">查看</div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" checked="" style="margin: 0px 6px 0px 0px;"><span>网格</span><button class="geColorBtn" style="position: absolute; margin-top: -4px; right: 20px; height: 22px;"><div style="width:36px;height:12px;margin:3px;border:1px solid black;background-color:#e0e0e0;"></div></button><input style="position: absolute; text-align: right; width: 38px; margin-top: -2px; right: 84px;"><div style="border-radius: 3px; border: 1px solid rgb(192, 192, 192); position: absolute; margin-top: -16px; right: 72px;"><div class="geBtnUp" style="border-bottom: 1px solid rgb(192, 192, 192); position: relative; height: 8px; width: 10px;"></div><div class="geBtnDown" style="border: none; position: relative; height: 8px; width: 10px;"></div></div></div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" checked="" style="margin: 0px 6px 0px 0px;"><span>页面视图</span></div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" style="margin: 0px 6px 0px 0px;"><span>背景</span><button class="geColorBtn" style="position: absolute; margin-top: -4px; right: 20px; height: 22px; display: none;"><div style="width:36px;height:12px;margin:3px;border:1px solid black;background-color:#ffffff;"></div></button><button class="geColorBtn" style="position: absolute; margin-top: -4px; padding-bottom: 2px; height: 22px; right: 72px; width: 56px;">图片</button></div></div><div class="geFormatSection" style="padding: 12px 0px 12px 18px;"><div style="padding: 0px 0px 6px; white-space: nowrap; overflow: hidden; width: 200px; font-weight: bold;">选项</div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" checked="" style="margin: 0px 6px 0px 0px;"><span>连接箭头</span></div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" checked="" style="margin: 0px 6px 0px 0px;"><span>连接点</span></div><div style="padding: 6px 0px 1px; white-space: nowrap; overflow: hidden; width: 200px; height: 18px;"><input type="checkbox" checked="" style="margin: 0px 6px 0px 0px;"><span>参考线</span></div></div><div class="geFormatSection" style="padding: 12px 0px 12px 18px;"><div style="padding: 0px 0px 6px; white-space: nowrap; overflow: hidden; width: 200px; font-weight: bold;">页面尺寸</div><select style="margin-bottom: 8px; width: 202px;"><option value="letter">US-Letter (8,5" x 11")</option><option value="legal">US-Legal (8,5" x 14")</option><option value="tabloid">US-Tabloid (11" x 17")</option><option value="executive">US-Executive (7" x 10")</option><option value="a0">A0 (841 mm x 1189 mm)</option><option value="a1">A1 (594 mm x 841 mm)</option><option value="a2">A2 (420 mm x 594 mm)</option><option value="a3">A3 (297 mm x 420 mm)</option><option value="a4">A4 (210 mm x 297 mm)</option><option value="a5">A5 (148 mm x 210 mm)</option><option value="a6">A6 (105 mm x 148 mm)</option><option value="a7">A7 (74 mm x 105 mm)</option><option value="b4">B4 (250 mm x 353 mm)</option><option value="b5">B5 (176 mm x 250 mm)</option><option value="16-9">16:9 (1600 x 900)</option><option value="16-10">16:10 (1920 x 1200)</option><option value="4-3">4:3 (1600 x 1200)</option><option value="custom">自定义</option></select><br><div style="margin-left: 4px; width: 210px; height: 24px;"><input name="format-formatpanel" type="radio" value="portrait" checked="" style="margin-right: 6px;"><span style="max-width: 100px;">竖向</span><input name="format-formatpanel" type="radio" value="landscape" style="margin-left: 10px; margin-right: 6px;"><span style="width: 100px;">横向</span></div><div style="margin-left: 4px; width: 210px; height: 24px; display: none;"><input size="7" style="text-align: right;"> in x <input size="7" style="text-align: right;"> in</div></div><div class="geFormatSection" style="padding: 12px 0px 12px 18px;"><button title="编辑数据 (Ctrl+M)" style="width: 202px; margin-bottom: 2px;">编辑数据</button><br><button title="清除默认风格 (Ctrl+Shift+R)" style="width: 202px;">清除默认风格</button></div></div></div><div class="geFooterContainer" style="left: 0px; right: 0px; bottom: 0px; z-index: 10004; height: 0px; display: none;"><div class="geFooter"></div></div><div class="geDiagramContainer geDiagramBackdrop" style="right: 240px; left: 224px; top: 39px; bottom: 0px; touch-action: none; cursor: default; overflow: auto;" tabindex="0"><div class="geBackgroundPage" style="position: absolute; border-width: 1px; overflow: hidden; left: 1422px; top: 828px; width: 2480px; height: 1168px; border-color: rgb(255, 255, 255); border-style: solid; background-color: rgb(255, 255, 255); background-image: url(&quot;&quot;); background-position: -14px -1px;"></div><svg style="left: 0px; top: 0px; width: 100%; height: 100%; display: block; min-width: 5325px; min-height: 2825px; position: absolute; background-image: none;"><g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2249 828 L 2249 1997" fill="none" stroke="#c0c0c0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 3076 828 L 3076 1997" fill="none" stroke="#c0c0c0" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"></path></g></g><g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2329 1058 L 2392.63 1058" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2329 1058 L 2392.63 1058" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2397.88 1058 L 2390.88 1061.5 L 2392.63 1058 L 2390.88 1054.5 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2169" y="1028" width="160" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2182,1052)"><foreignobject style="overflow:visible;" pointer-events="all" width="134" height="12"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 136px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">ProtobufDispatchHandler</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2599 1058 L 2669 1058 L 2669 928 L 2832 928 L 2832 941.63" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2599 1058 L 2669 1058 L 2669 928 L 2832 928 L 2832 941.63" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2832 946.88 L 2828.5 939.88 L 2832 941.63 L 2835.5 939.88 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2399" y="1013" width="200" height="90" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2405,1011)"><foreignobject style="overflow:visible;" pointer-events="all" width="189" height="94"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 190px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><pre style="background-color: #f4f4d9 ; color: #080808 ; font-family: &quot;宋体&quot; ; font-size: 13.5pt"><pre style="font-size: 13.5pt"><span style="color: #000000">SimpleAdapterDispatch</span></pre></pre><pre style="background-color: #f4f4d9 ; color: #080808 ; font-family: &quot;宋体&quot; ; font-size: 13.5pt"><span style="color: #000000">IMRequestAdapter</span></pre></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2969 1068 L 2989 1068 L 2989 1058 L 2989 1064.37" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2969 1068 L 2989 1068 L 2989 1058 L 2989 1064.37" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2989 1059.12 L 2992.5 1066.12 L 2989 1064.37 L 2985.5 1066.12 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2689" y="1028" width="280" height="80" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2699,1026)"><foreignobject style="overflow:visible;" pointer-events="all" width="261" height="85"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 262px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><pre style="background-color: rgb(244 , 244 , 217)"><font face="宋体"><span style="font-size: 18px">SimpleNettyControllerAdapter <br>implements <br></span></font><span style="color: rgb(0 , 0 , 0) ; font-size: 13.5pt">IMRequestAdapter</span></pre></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2824 1008 L 2829 1008 L 2829 1021.63" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2824 1008 L 2829 1008 L 2829 1021.63" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2829 1026.88 L 2825.5 1019.88 L 2829 1021.63 L 2832.5 1019.88 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2909 978 L 2982.63 978" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2909 978 L 2982.63 978" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2987.88 978 L 2980.88 981.5 L 2982.63 978 L 2980.88 974.5 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2739" y="948" width="170" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2698,930)"><foreignobject style="overflow:visible;" pointer-events="all" width="252" height="97"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 253px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><pre style="background-color: #f4f4d9 ; color: #080808 ; font-family: &quot;宋体&quot; ; font-size: 13.5pt">SimpleRequestHandlerAdapter <br>implements<br>IMRequestAdapter</pre></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2989" y="948" width="170" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(3002,951)"><foreignobject style="overflow:visible;" pointer-events="all" width="144" height="55"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 145px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><pre style="background-color: #f4f4d9 ; color: #080808 ; font-family: &quot;宋体&quot; ; font-size: 13.5pt"><span style="color: #000000">IMRequestHandler</span></pre></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2989" y="1028" width="140" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2992,1031)"><foreignobject style="overflow:visible;" pointer-events="all" width="135" height="55"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 136px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><pre style="background-color: #f4f4d9 ; color: #080808 ; font-family: &quot;宋体&quot; ; font-size: 13.5pt"><span style="color: #000000">NettyController</span></pre></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2169" y="968" width="40" height="20" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="2169" y="968" width="40" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(2139,951)"><foreignobject style="overflow:visible;" pointer-events="all" width="101" height="54"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 101px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">netty 接收到请求 通过 ImRequestAdapter 进行分发处理&nbsp;</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2439" y="978" width="160" height="20" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="2439" y="978" width="160" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(2440,975)"><foreignobject style="overflow:visible;" pointer-events="all" width="158" height="26"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 158px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">链式执行, 调用具体的适配器, 适配器</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2739" y="878" width="160" height="20" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="2739" y="878" width="160" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(2740,875)"><foreignobject style="overflow:visible;" pointer-events="all" width="158" height="26"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 158px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">适配器 适配不同的类型实现进行业务调用</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2979" y="878" width="160" height="20" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="2979" y="878" width="160" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g style=""><g transform="translate(2984,882)"><foreignobject style="overflow:visible;" pointer-events="all" width="150" height="12"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 152px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">具体业务实现层, 实现也逻辑</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2299 1198 L 2432.63 1198" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2299 1198 L 2432.63 1198" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2437.88 1198 L 2430.88 1201.5 L 2432.63 1198 L 2430.88 1194.5 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2179" y="1168" width="120" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2197,1192)"><foreignobject style="overflow:visible;" pointer-events="all" width="84" height="12"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 85px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">接收到一个请求</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible; cursor: move;"><rect x="2040" y="1190" width="90" height="20" fill="none" stroke="white" pointer-events="stroke" visibility="hidden" stroke-width="19"></rect><rect x="2040" y="1190" width="90" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g style="cursor: move;"><g transform="translate(2042,1193)"><foreignobject style="overflow:visible;" pointer-events="all" width="71" height="12"><div style="display:inline-block;font-size:12px;font-family:Helvetica;color:#000000;line-height:1.2;vertical-align:top;white-space:nowrap;text-align:left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">protobuf 请求</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2559 1198 L 2619 1198 L 2619 1194 L 2672.63 1194" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2559 1198 L 2619 1198 L 2619 1194 L 2672.63 1194" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2677.88 1194 L 2670.88 1197.5 L 2672.63 1194 L 2670.88 1190.5 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2439" y="1168" width="120" height="60" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2441,1185)"><foreignobject style="overflow:visible;" pointer-events="all" width="116" height="26"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 116px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">链式执行, 寻找业务实现</div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><path d="M 2889 1194 L 2939 1194 L 2939 1193 L 2982.63 1193" fill="none" stroke="white" stroke-miterlimit="10" pointer-events="stroke" visibility="hidden" stroke-width="19"></path><path d="M 2889 1194 L 2939 1194 L 2939 1193 L 2982.63 1193" fill="none" stroke="#777777" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 2987.88 1193 L 2980.88 1196.5 L 2982.63 1193 L 2980.88 1189.5 Z" fill="#777777" stroke="#777777" stroke-miterlimit="10" pointer-events="all"></path></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2679" y="1158" width="210" height="72" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2681,1160)"><foreignobject style="overflow:visible;" pointer-events="all" width="206" height="68"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 206px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">key 为 test<div><br><div>执行 SimpleRequestHandlerAdapter 发现含有key 为test的业务处理类</div></div><div>执行 process 方法</div></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2989" y="1158" width="140" height="70" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2991,1166)"><foreignobject style="overflow:visible;" pointer-events="all" width="136" height="54"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 136px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;">含有key为test的业务处理类 TestRequestHandler<div>执行process 打印 hello wold</div></div></div></foreignobject></g></g><g transform="translate(0.5,0.5)" style="visibility: visible;"><rect x="2189" y="1298" width="980" height="180" fill="#ffffff" stroke="#777777" pointer-events="all"></rect></g><g style=""><g transform="translate(2191,1287)"><foreignobject style="overflow:visible;" pointer-events="all" width="976" height="202"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 976px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;white-space:normal;"><p><font style="font-size: 24px">实现实时业务简单的的方式就是 实现IMRequestHandler, 或者&nbsp;NettyController接口, 并使用注解@NettyHandler("chat") 表明业务类型, 业务类型区分关键字是 统一请求包装类MessageWrap.key, 并在TestNettyConfig中requestAdapter进行修改, 将新增的业务处理类注册到相应的分发适配器中(SimpleRequestHandlerAdapter,&nbsp;SimpleNettyControllerAdapter当前只是简单实现两个适配器)</font></p><p><font style="font-size: 24px">如果整合到spring中, 可以通过@Autowired自动注入形式实现对服务类的注入, 优化启动配置</font></p></div></div></foreignobject></g></g></g><g></g><g></g></g></svg></div><div class="geToolbarContainer" style="left: 0px; right: 0px; top: 0px; height: 38px;"><div class="geToolbar"><a class="geLabel" title="缩放 (Alt+Mousewheel)" style="white-space: nowrap; position: relative; overflow: hidden; width: 50px;">100%<img border="0" style="position: absolute; right: 1px; top: 5px;" src="" valign="middle"></a><div class="geSeparator"></div><a class="geButton" title="放大 (Ctrl + (Numpad) / Alt+Mousewheel)"><div class="geSprite geSprite-zoomin"></div></a><a class="geButton" title="缩小 (Ctrl - (Numpad) / Alt+Mousewheel)"><div class="geSprite geSprite-zoomout"></div></a><div class="geSeparator"></div><a class="geButton" title="取消操作 (Ctrl+Z)"><div class="geSprite geSprite-undo"></div></a><a class="geButton mxDisabled" title="重做 (Ctrl+Y)"><div class="geSprite geSprite-redo"></div></a><div class="geSeparator"></div><a class="geButton mxDisabled" title="删除 (Delete)"><div class="geSprite geSprite-delete"></div></a><div class="geSeparator"></div><a class="geButton mxDisabled" title="移至最前 (Ctrl+Shift+F)"><div class="geSprite geSprite-tofront"></div></a><a class="geButton mxDisabled" title="移至最后 (Ctrl+Shift+B)"><div class="geSprite geSprite-toback"></div></a><div class="geSeparator"></div><a class="geButton mxDisabled" title="填充色..."><div class="geSprite geSprite-fillcolor"></div></a><a class="geButton mxDisabled" title="线条颜色..."><div class="geSprite geSprite-strokecolor"></div></a><a class="geButton mxDisabled" title="阴影"><div class="geSprite geSprite-shadow"></div></a><div class="geSeparator"></div><a class="geButton" title="连接" style="white-space: nowrap; overflow: hidden; position: relative; width: 34px;"><div class="geSprite geSprite-connection" style="margin-left:0px;margin-top:0px;"></div><img border="0" style="position: absolute; right: 4px; top: 5px; left: 24px;" src="" valign="middle"></a><a class="geButton" title="航点" style="white-space: nowrap; overflow: hidden; position: relative; width: 34px;"><div class="geSprite geSprite-orthogonal" style="margin-left:0px;margin-top:0px;"></div><img border="0" style="position: absolute; right: 4px; top: 5px; left: 24px;" src="" valign="middle"></a><div class="geSeparator"></div><a class="geLabel" title="插入 (双击以插入文字)" style="white-space: nowrap; overflow: hidden; position: relative; width: 28px;"><div class="geSprite geSprite-plus" style="margin-left:-4px;margin-top:-3px;"></div><img border="0" style="position: absolute; right: 4px; top: 5px; left: 24px;" src="" valign="middle"></a></div></div><div class="geHsplit" title="收起/展开" style="width: 12px; touch-action: none; top: 39px; bottom: 0px; left: 212px;"></div></body></html>